/*
 * Rei.java
 *
 * Created on 8 de Agosto de 2006, 00:23
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package magchess10.rn.pecas;

import magchess10.rn.controle.Jogada;

/**
*
* @author Einstein
*/
public class Rei extends Pecas{
    
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/** Creates a new instance of Rei */
    public Rei(String p_cor,boolean p_ehPrimeiroLance) {
        super ("Rei",p_cor,5,p_ehPrimeiroLance);
    }

    public boolean ehMovimentoDaPeca(Jogada p_atual) 
    {
    	//todas as direcoes
    	boolean l_direcao=Movimentos.ehDiagonal(p_atual)||Movimentos.ehVerticalHorizontal(p_atual);
    	//somente uma casa
    	boolean l_distancia=(p_atual.distanciaManhatan()==1);
    	boolean l_jogadaNormal=l_direcao&&l_distancia;
    	boolean l_roqueDireita=andarDoisDireita(p_atual)&&p_atual.getInformacoes().getPodeRoqueDireita();
    	boolean l_roqueEsquerda=andarDoisEsquerda(p_atual)&&p_atual.getInformacoes().getPodeRoqueEsquerda();
    	return l_jogadaNormal||l_roqueEsquerda||l_roqueDireita;
    	
    }
    
    boolean andarDoisDireita(Jogada p_atual){
    	int l_colunaDaPosicaoFinal=p_atual.getPosicaoFinal().getColuna();
    	int l_colunaDaPosicaoInicial=p_atual.getPosicaoInicial().getColuna();
    	int l_linhaDaPosicaoFinal=p_atual.getPosicaoFinal().getLinha();
    	int l_linhaDaPosicaoInicial=p_atual.getPosicaoInicial().getLinha();
       if(l_linhaDaPosicaoInicial==l_linhaDaPosicaoFinal&&
    		   l_colunaDaPosicaoFinal==l_colunaDaPosicaoInicial+2) return true;
       return false;
    }

    boolean andarDoisEsquerda(Jogada p_atual){
    	int l_colunaDaPosicaoFinal=p_atual.getPosicaoFinal().getColuna();
    	int l_colunaDaPosicaoInicial=p_atual.getPosicaoInicial().getColuna();
    	int l_linhaDaPosicaoFinal=p_atual.getPosicaoFinal().getLinha();
    	int l_linhaDaPosicaoInicial=p_atual.getPosicaoInicial().getLinha();
       if(l_linhaDaPosicaoInicial==l_linhaDaPosicaoFinal&&
    		   l_colunaDaPosicaoFinal==l_colunaDaPosicaoInicial-2) return true;
       return false;
    }
    
}
